/**
 * 发布者
 *  收集依赖：每个响应式的属性，都会创建一个 Dep 对象，
 *          所有依赖于该属性的位置的地方都会创建一个 watcher 对象
 *          Dep 收集的是依赖该属性的 watcher 对象
 */
class Dep {

  constructor () {
    // 存储所有的观察者
    this.subs = []
  }

  /**
   * 添加观察者
   * @param {*} sub 
   */
  addSub (sub) {
    if (sub && sub.update) {
      this.subs.push(sub)
    }
  }

  /**
   * 发送通知
   */
  notify () {
    this.subs.forEach(sub => {
      sub.update()
    })
  }
}